package com.jar.exercise.泛型.范型类;

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
// 1、使用时：类似于Object，不等同于Object
        ArrayList list = new ArrayList();
// list.add(new Date());//有风险
        list.add("hello");
        test(list);// 泛型擦除，编译不会类型检查
// ArrayList<Object> list2 = new ArrayList<Object>();
// test(list2);//一旦指定Object，编译会类型检查，必须按照Object处理
    }

    public static void test(ArrayList<Object> list) {
        String str = "";
        for (Object s : list) {
            str += s + ",";
        }
        System.out.println("元素:" + str);
    }
}

//
class Father<T1, T2> {
}

// 子类不保留父类的泛型
// 1)没有类型擦除
class Son1 extends Father {// 等价于class Son extends Father<Object,Object>{
}

// 2)具体类型
class Son2 extends Father<Integer, String> {
}

// 子类保留父类的泛型
// 1)全部保留
class Son3<T1, T2> extends Father<T1, T2> {
}

// 2)部分保留
class Son4<T2> extends Father<Integer, T2> {
}

// 子类保留父类的泛型
// 1)全部保留
class Son5<T1, T2, T3, T4> extends Father<T1, T2> {


}    // 2)部分保留

class Son6<T2, A, B> extends Father<Integer, T2> {
}